package com.qdlc.p2p.biz.service;

import java.util.List;

import com.qdlc.p2p.dal.common.model.jpa.PageDataList;
import com.qdlc.p2p.dal.dto.AdditionalFlowInvestor;
import com.qdlc.p2p.dal.dto.AdditionalFlowProject;
import com.qdlc.p2p.dal.dto.AdditionalFlowRepayPlan;
import com.qdlc.p2p.dal.dto.User;
import com.qdlc.p2p.dal.model.FlowInvestorModel;
import com.qdlc.p2p.dal.model.FlowProjectModel;
import com.qdlc.p2p.dal.model.FlowYieldPlanModel;
import com.qdlc.p2p.dal.model.RepayPlanModel;

public interface FinanFlowQueryService {

    /**
     * 查询项目列表
     *
     * @param projectModel
     * @return
     */
    PageDataList<FlowProjectModel> getPageFlowProject(FlowProjectModel projectModel);

    /**
     * 根据id查询理财项目
     *
     * @param id
     * @return
     */
    AdditionalFlowProject getFlowProjectById(long id);

    /**
     * @param pid
     * @return
     */
    List<AdditionalFlowInvestor> getFlowInvestor(long pid);

    /**
     * 查询当前项目购买记录
     *
     * @param pid
     * @param page
     * @param size
     * @return
     */
    PageDataList<FlowInvestorModel> getInvestorList(long pid, int page, int size);

    /**
     * 查询用户已购买的理财记录
     *
     * @param userId
     * @return
     */
    PageDataList<FlowInvestorModel> getUserInvestList(long userId, FlowProjectModel model);

    /**
     * 获取理财待收计划
     *
     * @param userId
     * @param model
     * @return
     */
    PageDataList<FlowYieldPlanModel> getUserYieldPlan(long userId, FlowProjectModel model);

    /**
     * 查询流转标还款详情
     *
     * @param projectId
     * @return
     */
    List<AdditionalFlowRepayPlan> getFlowRepayPlanList(long projectId);

    /**
     * 首页查询列表
     *
     * @return
     */
    List<FlowProjectModel> getFlowProjectIndex();

    /**
     * 根据uuid查询理财项目
     *
     * @param uuid
     * @return
     */
    AdditionalFlowProject getProjcetByUuid(String uuid);

    /**
     * 借款人个人中心页面查询自己的流转项目
     *
     * @param model
     * @return
     */
    PageDataList<FlowProjectModel> getBorrowFlowProject(FlowProjectModel model);

    /**
     * 获取项目还款计划
     *
     * @param model
     * @return
     */
    PageDataList<RepayPlanModel> getRepayPlanPage(FlowProjectModel model);

    /**
     * 我要投资页面查询
     *
     * @param model
     * @return
     */
    PageDataList<FlowProjectModel> getindexFlowList(FlowProjectModel model);

    /**
     * 根据用户和时间获取待流转理财代收本金总额
     *
     * @param user 用户 date 时间
     * @return 待收本金日期和金额
     */
    List<Object[]> getFlowCapitalByUserAndDate(User user, String date);

    /**
     * 根据用户和时间获取待流转理财代收利息总额
     *
     * @param user 用户 date 时间
     * @return 待收本金日期和金额
     */
    List<Object[]> getFlowInterestByUserAndDate(User user, String date);
}
